package cn.zk.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

/**
 * 交换机发送给队列的回调函数
 * ReturnCallback是一个函数式接口，可以用lambda表达式简写匿名内部类
 * 一般是业务错误导致失败回调：
 *  比如队列绑定交换机时，队列名写错导致交换机找不到对于的队列发送消息
 * 处理方式：
 *      1.打印错误日志，方便程序员和运维人员排查
 *      2.将消息存入数据库，以便之后重试
 *      3.系统自动重试
 */
@Slf4j
public class MyReturnCallback implements RabbitTemplate.ReturnCallback{
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.info("交换机发送给队列的回调函数:Message={},replyCode={},replyText={},exchange{},routingKey={}",
                message,replyCode,replyText,exchange,routingKey);
    }
}
